Computerized systems and tools nowadays aid or control almost every aspect of human life, from typing documents to managing traffic lights. However, design of computer systems, whether of software components, i.e. computer program instructions in high or low level coding, or of hardware components, such as circuits, chips, or the like, can be a complex as well as time consuming task. During the design process and also in the manufacturing stage, there is a significant likelihood that errors, defects, anomalies, and any other undesired or unexpected behaviors, colloquially referred to as “bugs”, be introduced into the system. It is therefore not surprising that an integral and critical part in the development of computer systems is dedicated to the testing and debugging thereof, in which phase the bugs are expected to be discovered and rectified. Such testing typically entails performing verification of the design, namely, the correctness of the design is checked against a specification of functionalities it is required to fulfill. The testing phase is considered one of the most difficult tasks in designing a computer system. The cost of not discovering a bug prior to shipment or distribution of the design to end-users or downstream manufacturers, for example, may be enormous, as well as even lead to disastrous outcomes. For example, a bug may cause the injury of a person relying on a designated behavior of the computer system. Additionally, a bug in hardware or firmware may be expensive to fix, as patching it requires call-back of the malfunctioned component. Hence, many developers of computer systems invest a substantial portion of the development cycle to discover erroneous behaviors of the computer system in question.